package com.jidong.test_springboot.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

@Component
@Aspect
@Slf4j
public class AutoLog {
	
	/*双引号里定义切面规则，要识别哪些代码开始进行切入***/
	/*切面规则是"执行web包内所有的类中的所有的方法的时候"   其中 第一个 *代表方法返回值类型，*为任意类型
	 *  第二个* 是在web.后的代表类名  任意类名  *Servlet是指以servlet结尾的类名
	 *  第三个*是方法名任意
	 *小括号是方法的参数列表 
	 *括号中的..代表任意参数，可以是多个参数
	 * 
	 * */
	@Pointcut("execution(public * com.jidong.test_springboot.web.*Servlet.*(..))")
	public void pointCut() {
		
	}
	
	
	//自定义的切面执行内容，
	@Around(value="pointCut()")
	public Object around(ProceedingJoinPoint pjp) throws Throwable{
		long time1=System.currentTimeMillis();
		Object obj=pjp.proceed();//正常执行切面的方法  返回值是方法本身的返回值
		long time2=System.currentTimeMillis();
		
		long time=time2-time1;//执行方法一共消耗多久
		String methodName=pjp.getSignature().getName();//执行当前方法的方法名
		String className=pjp.getTarget().getClass().getName();//执行当前方法属于哪个类
		log.info("正在执行"+className+"类的"+methodName+"方法，耗时"+time+"毫秒");
		return obj;
	}
	
}
